/*
 * @Description:
 * @Author: dh
 * @Date: 2021-10-08 09:28:28
 * @LastEditors: dh
 * @LastEditTime: 2024-05-14 16:26:04
 */

// TODO 交叉类型 & 。类型 A 与类型 B 或更多类型合并，并获得具有所有属性的单个类型。
type LeftType = {
	id: number
	left: string
}

type RightType = {
	id: number
	right: string
}

type IntersectionType = LeftType & RightType
// 上面的联合类型看不到详细的类型申明了，改下面的方式，组成一个全新的类型
type IntersectionType2 = Omit<LeftType & RightType, ''>

// TODO 联合类型 | 。使你可以赋予同一个变量不同的类型
type UnionType = string | number

interface L {
	name: string
}
interface R {
	age: number
}

type D = L & R
type E = L & UnionType // FIXME

// TODO 和类一样，接口也可以相互继承。
interface Shape {
	color: string
}

interface PenStroke {
	penWidth: number
}

interface Square1 extends Shape, PenStroke {
	sideLength: number
}

let square1 = <Square1>{}
square1.color = 'blue'
square1.sideLength = 10
square1.penWidth = 10
